function output = my_getResearchArea(data,mask)
% output = my_getResearchArea(data,mask)
%
% --------自定义函数--------
% 函数名称：my_getResearchArea
% 函数说明：根据mask获取研究extent内的数据，通过切边去掉完全无效的区域
% 函数输入：data,mask
%   data： lon-lat（-time）数据
%   mask： 掩膜文件,要求里面的选定区域是1构成的长方形  
% 函数输出：output
% 作者：sid
% LOG：
%    2021/11/09 ver 1.0: create and test
%    2021/11/10 ver 1.1: fix bug when process 2d data

if ~testMask(mask)
    error('Mask文件不符合规范')
end

switch ndims(data)
case 2
    output = data(logical(mask(:)));
    output = reshape(output, [getYLength(mask),getXLength(mask)]);
case 3
    SIZE = [getYLength(mask),getXLength(mask),size(data,3)];
    data = my_shiftdim(data,1);
    output = data(:,logical(mask(:)));
    output = my_shiftdim(output,2,SIZE);
end
end

function flag = testMask(mask)
% 一个不成熟的检验mask文件是否符合要求的函数
if any(isnan(mask),'all')
    flag = false;
elseif sum(mask,'all') == getXLength(mask).* getYLength(mask)
    flag = true;
else
    flag = false;
end
end


function xlength = getXLength(mask)
% 获取横坐标长度
xlength = sum(any(mask,1));
end

function ylength = getYLength(mask)
% 获取纵坐标长度
ylength = sum(any(mask,2));
end